@echo off
chcp 65001 >nul
title RocketMQ项目快速部署

echo ========================================
echo    RocketMQ项目快速部署脚本
echo ========================================
echo.

REM 设置变量
set SERVER_IP=192.168.211.139
set SERVER_USER=root
set SSH_KEY=C:\Users\Teriberka\.ssh\my_linux_key
set PROJECT_NAME=rocketmq-rate-limit-demo

echo 服务器信息:
echo - IP地址: %SERVER_IP%
echo - 用户名: %SERVER_USER%
echo - SSH密钥: %SSH_KEY%
echo.

REM 检查Maven
echo 检查Maven环境...
echo 正在执行: mvn --version

REM 尝试执行Maven命令并捕获输出
mvn --version > maven_check.txt 2>&1
set MAVEN_EXIT_CODE=%errorlevel%

REM 显示Maven检查结果
type maven_check.txt
echo.

if %MAVEN_EXIT_CODE% neq 0 (
    echo ✗ Maven检查失败 (退出代码: %MAVEN_EXIT_CODE%)
    echo.
    echo 可能的原因:
    echo 1. Maven未安装
    echo 2. Maven不在PATH环境变量中
    echo 3. JAVA_HOME环境变量未设置
    echo.
    echo 解决方案:
    echo 1. 下载并安装Maven: https://maven.apache.org/download.cgi
    echo 2. 将Maven的bin目录添加到PATH环境变量
    echo 3. 设置JAVA_HOME环境变量指向JDK安装目录
    echo.
    echo 当前PATH环境变量:
    echo %PATH%
    echo.
    echo 按任意键退出...
    pause >nul
    exit /b 1
)

echo ✓ Maven检查成功
echo.

REM 清理临时文件
del maven_check.txt >nul 2>&1

REM 构建项目
echo 正在构建项目...
echo 执行命令: mvn clean package -DskipTests
mvn clean package -DskipTests
if %errorlevel% neq 0 (
    echo ✗ 项目构建失败
    echo 请检查项目配置和依赖
    pause
    exit /b 1
)
echo ✓ 项目构建成功
echo.

REM 检查jar包
if not exist target\%PROJECT_NAME-*.jar (
    echo ✗ 未找到构建的jar包
    echo 请检查target目录中的文件
    dir target
    pause
    exit /b 1
)

REM 获取jar包名称
for %%f in (target\%PROJECT_NAME-*.jar) do set JAR_FILE=%%f
echo 找到jar包: %JAR_FILE%
echo.

REM 准备部署文件
echo 准备部署文件...
if not exist deploy mkdir deploy
copy %JAR_FILE% deploy\app.jar >nul
copy Dockerfile deploy\ >nul
copy broker.conf deploy\ >nul
echo ✓ 部署文件准备完成
echo.

REM 上传到服务器
echo 正在上传文件到服务器...
echo 执行命令: scp -i "%SSH_KEY%" -r deploy\* %SERVER_USER%@%SERVER_IP%:/home/rocketmq/
scp -i "%SSH_KEY%" -r deploy\* %SERVER_USER%@%SERVER_IP%:/home/rocketmq/
if %errorlevel% neq 0 (
    echo ✗ 文件上传失败
    echo 请检查网络连接和SSH密钥配置
    pause
    exit /b 1
)
echo ✓ 文件上传成功
echo.

REM 在服务器上部署
echo 正在服务器上构建和部署...
echo 执行命令: ssh -i "%SSH_KEY%" %SERVER_USER%@%SERVER_IP%
ssh -i "%SSH_KEY%" %SERVER_USER%@%SERVER_IP% << 'EOF'
cd /home/rocketmq

echo "停止现有容器..."
docker stop rocketmq-app 2>/dev/null || true
docker rm rocketmq-app 2>/dev/null || true

echo "删除旧镜像..."
docker rmi rocketmq-app:latest 2>/dev/null || true

echo "构建新镜像..."
docker build -t rocketmq-app:latest .

if [ $? -eq 0 ]; then
    echo "镜像构建成功，启动应用容器..."
    docker run -d \
      --name rocketmq-app \
      --network rmq \
      -p 8080:8080 \
      -e SPRING_PROFILES_ACTIVE=prod \
      -e ROCKETMQ_NAMESRV_ADDR=192.168.211.139:9876 \
      -v /home/rocketmq/logs/app:/app/logs \
      --restart unless-stopped \
      rocketmq-app:latest

    echo "等待应用启动..."
    sleep 15

    echo "检查容器状态..."
    docker ps | grep rocketmq-app

    echo "测试应用健康状态..."
    if curl -f http://localhost:8080/api/rocketmq/health >/dev/null 2>&1; then
        echo "✓ 应用健康检查通过！"
    else
        echo "⚠ 应用还未完全启动，请稍后检查"
    fi

    echo "清理临时文件..."
    rm -f app.jar Dockerfile broker.conf
else
    echo "✗ 镜像构建失败！"
    exit 1
fi
EOF

if %errorlevel% neq 0 (
    echo ✗ 服务器部署失败
    echo 请检查服务器上的Docker环境
    pause
    exit /b 1
)
echo ✓ 服务器部署成功
echo.

REM 清理临时文件
echo 清理临时文件...
rmdir /s /q deploy
echo ✓ 清理完成
echo.

echo ========================================
echo           部署完成！
echo ========================================
echo.
echo 应用访问地址: http://%SERVER_IP%:8080
echo 健康检查: http://%SERVER_IP%:8080/api/rocketmq/health
echo.
echo 部署成功！按任意键退出...
pause >nul
